﻿// 403 二叉树的最近公共祖先.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
/*
http://oj.daimayuan.top/course/7/problem/457

给你一棵 n个节点的二叉树，节点的编号为 1到 n，二叉树的根为 1号节点。

读入 u,v，请求出 u号节点和 v号节点的最近公共祖先（Lowest Common Ancestor）。

如果 x号节点既是 u号节点的祖先也是 v号节点的祖先，则称 x号节点是 u号节点和 v号节点的公共祖先。

如果 x号节点是 u号节点和 v号节点的所有公共祖先中深度最深的，则称 x号节点是 u号节点和 v号节点的最近公共祖先。

输入格式
第一行一个整数 n表示节点数。

接下来 n行，每行两个整数，第一个整数表示 i号节点的左儿子的编号，第二个整数表示 i号节点的右儿子的编号，
如果某个数字为 0表示没有对应的子节点。

输入保证是一棵二叉树。

最后一行两个整数 u,v表示要求最近公共祖先的两个节点的编号。

输出格式
输出一行一个整数，代表 u号节点和 v号节点的最近公共祖先。

样例输入
4
0 2
3 4
0 0
0 0
3 4
样例输出
2
数据规模
对于所有数据，保证 2≤n≤1000,1≤u,v≤n。
*/


struct node {
	int l, r, fa;
}a[1001];
int n,c[1001],d[1001];



int main()
{
	scanf("%d",&n);
	for (int i = 1; i <= n; i++) {
		int x, y;
		scanf("%d%d", &x, &y);
		if (x) {
			a[i].l = x, a[x].fa = i;
		}
		if (y) {
			a[i].r = y, a[y].fa = i;
		}
	}

	int u, v;
	scanf("%d%d",&u,&v);
	int l1 = 0;
	while (u != 1) {
		c[++l1] = u, u = a[u].fa;
	}
	c[++l1] = 1;
	int l2 = 0;
	while (v != 1)
		d[++l2] = v, v = a[v].fa;
	d[++l2] = 1;
	int x = 0;
	for (int i = l1, j = l2; i && j; --i, -- j) {
		if (c[i] == d[j]) {
			x = c[i];
		}
		else { break; }
	}
	printf("%d\n",x);
	return 0;
}

 
//=========================================
/*
{
	#include <iostream>
	#include <algorithm>
	using namespace std;

	int n, q[1025];
	struct TreeNode {
		int depth;
		int l, r, fa;
	}a[1025];

	int main() {
		scanf("%d", &n);
		for (int i = 1; i <= n; i++) {
			int x, y;
			scanf("%d%d", &x, &y);
			if (x)
				a[i].l = x, a[x].fa = i;
			if (y)
				a[i].r = y, a[y].fa = i;
		}
		int front = 1, rear = 1;
		q[1] = 1; a[1].depth = 1;
		while (front <= rear) {
			int p = q[front];
			++front;
			if (a[p].l) {
				q[++rear] = a[p].l, a[a[p].l].depth = a[p].depth+1;
			}
			if (a[p].r) {
				q[++rear] = a[p].r, a[a[p].r].depth = a[p].depth + 1;
			}
		}

		int  u, v;
		scanf("%d%d",&u,&v);
		if (a[u].depth < a[v].depth)
			swap(u,v);
		int x = a[u].depth - a[v].depth;
		for (int i = 1; i <= x; i++)
			u = a[u].fa;
		while (u != v)
			u = a[u].fa, v = a[v].fa;
			
		printf("%d\n",u);
		return 0;
	}
}

*/